 
  

 






<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html>

<!-- Mirrored from www.javapractices.com/topic/TopicAction.do;jsessionid=4FCCB481C702D708A7360133D128E359?Id=238 by HTTrack Website Copier/3.x [XR&CO'2010], Sun, 12 Jun 2011 17:27:38 GMT -->
<!-- Added by HTTrack --><meta http-equiv="content-type" content="text/html;charset=UTF-8"><!-- /Added by HTTrack -->
<head>
 <title>
  Java Practices -> Read jar version information
 </title>
 <link rel="stylesheet" type="text/css" href="../stylesheet8.css" media="all">
 
 <link rel="shortcut icon" href='../images/favicon.ico' type="image/vnd.microsoft.icon">
 <meta name="description" content="Concise presentations of java programming practices, tasks, and conventions, amply illustrated with syntax highlighted code examples.">
 
 <meta name='keywords' content='java,java programming,java practices,java idiom,java style,java design patterns,java coding conventions,'>
 
 
</head>
 
<body>


<div class='menu-bar'>
 
  <a href='../home/HomeAction.html' title='Table of Contents'>Home</a> |
  <a href='../vote/VoteSummaryAction-2.html' title='View Poll Results'>Poll</a> |
   
  <A href='../feedback/FeedbackAction451f-2.html?Operation=Show' title='Send Your Feedback'>Wiki</a> |
  <b><a href='../source/SourceAction-2.html' title='Grab Source Code'>Source Code</a></b><IMG class='no-margin' SRC="../images/goldstar.gif" ALT=""> |

  <a href='http://www.web4j.com/Java_Web_Application_Framework_Overview.jsp?From=1' title='Free Download - Java Web Application Framework'><b>WEB4J</b></a> |
  
  <a href='http://www.date4j.net/' title='Replacement for java.util.Date'><b>DATE4J</b></a> |

   <a href='../references/ReferencesAction-2.html' title='References'>Links</a>
   
  <form action='http://www.javapractices.com/search/SearchAction.do' method='get' class='search-form'>
   <input type='text' name='SearchTerms' value="" size=12 maxlength=50 class='search'>
   <input type='submit' value="Search">
  </form>
 
</div>

<P>



  

 






<p class="display-messages">

 

 

</p>


<div class="main-layout">
 
   

 




<div class='page-title'>Read jar version information</div>

<div class='main-body'>
 
<br>
A <a href='http://java.sun.com/docs/books/tutorial/deployment/jar/index.html'>jar file</a> 
is simply a zipped (compressed) collection of class files, and any associated resources.

<P>It's often important to know which version of a jar file is being used by an application. 
For example, upon startup, an application might find it useful to log the version numbers of all of its known jars.
This can be very useful for debugging problems later on.

<P>
The <a href='http://java.sun.com/docs/books/tutorial/deployment/jar/packageman.html'>MANIFEST</a> file is a 
text file included with each jar, which specifies high-level information about its contents. 
The MANIFEST file usually includes version information. 
That version information is, in turn, accessible at run time using methods of the 
<a href='http://java.sun.com/javase/6/docs/api/java/lang/Package.html#getSpecificationVersion%28%29'>Package</a> class.

<P><b>Example</b>
<P>The following example extracts the name and version of the package containing the class 
<tt>InternetAddress</tt>. (If the javax.mail.internet package is not on your class path, 
you can easily modify this code to examine some other package.)
<br>
<PRE>

<span class='keyword'>import</span> javax.mail.internet.InternetAddress;

<span class='comment'>/**
Display package name and version information for 
javax.mail.internet.

This example is a bit artificial, since examining the version of a 
jar from Sun Microsystems is unusual.  
*/</span>
<span class='keyword'>public</span> <span class='keyword'>final</span> <span class='keyword'>class</span> ReadVersion {
  
  <span class='keyword'>public</span> <span class='keyword'>static</span> <span class='keyword'>void</span> main(String... aArgs){
    ReadVersion readVersion = <span class='keyword'>new</span> ReadVersion();
    readVersion.readVersionInfoInManifest();
  }
  
  <span class='keyword'>public</span> <span class='keyword'>void</span> readVersionInfoInManifest(){
    
    <span class='comment'>//build an object whose class is in the target jar
</span>    InternetAddress object = <span class='keyword'>new</span> InternetAddress();
    
    <span class='comment'>//navigate from its class object to a package object
</span>    Package objPackage = object.getClass().getPackage();
    
    <span class='comment'>//examine the package object 
</span>    String name = objPackage.getSpecificationTitle();
    String version = objPackage.getSpecificationVersion();
    <span class='comment'>//some jars may use 'Implementation Version' entries in the manifest instead
</span>    
    System.out.println(<span class='literal'>"Package name: "</span> + name);
    System.out.println(<span class='literal'>"Package version: "</span> + version);
  }
} 
</PRE>
<br>
Example output of this class :
<PRE>Package name: JavaMail(TM) API Design Specification
Package version: 1.3</PRE>
<br>

</div>





<div class='topic-section'>Would you use this technique?</div>
<div class='main-body'>
  
  <form action="http://www.javapractices.com/vote/AddVoteAction.do" method='post'>
    Yes<input type='radio' name='Choice' value='Y' >
    &nbsp;&nbsp;No<input type='radio' name='Choice' value='N'>
    &nbsp;&nbsp;Undecided<input type='radio' name='Choice' value="?" >
    &nbsp;&nbsp;<input type=submit value="Vote" >
    <input type='hidden' name='Operation' value='Apply'>
    <input type='hidden' name='TopicId' value='238'>
  </form>
</div>

<div style='height:10.0em;'></div>

 
 
</div>

  

 





<div align='center' class='legalese'>  
&copy; 2011 Hirondelle Systems |
<a href='../source/SourceAction-2.html'><b>Source Code</b></a><IMG class='no-margin' SRC="../images/goldstar.gif" ALT=""> |
<a href="mailto:webmaster@javapractices.com">Contact</a> |
<a href="http://creativecommons.org/licenses/by-nc-sa/1.0/">License</a> |
<a href='../apps/cjp.rss'>RSS</a>
<!-- ukey="2AC36CD2" -->
<!-- ckey="16DF3D87" -->
<br>

 Individual code snippets can be used under this <a href='../LICENSE.txt'>BSD license</a> - Last updated on June 6, 2010.<br>
 Over 150,000 unique IPs last month - <span title='Java Practices 2.6.5, Mon May 16 00:00:00 EDT 2011'>Built with</span> <a href='http://www.web4j.com/'>WEB4J</a>.<br>
 - In Memoriam : Bill Dirani -
</div>

<script src="../../www.google-analytics.com/urchin.js" type="text/javascript">
</script>
<script type="text/javascript">
_uacct = "UA-2633428-1";
urchinTracker();
</script>



</body>

<!-- Mirrored from www.javapractices.com/topic/TopicAction.do;jsessionid=4FCCB481C702D708A7360133D128E359?Id=238 by HTTrack Website Copier/3.x [XR&CO'2010], Sun, 12 Jun 2011 17:27:38 GMT -->
<!-- Added by HTTrack --><meta http-equiv="content-type" content="text/html;charset=UTF-8"><!-- /Added by HTTrack -->
</html>
